using Native.Csharp.App.Interface;
using Native.Csharp.App.Model;
using SSR;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace Native.Csharp.App.Event
{
    public class Event_GroupMessage : IEvent_GroupMessage
    {
        #region --公开方法--
        /// <summary>
        /// Type=2 群消息<para/>
        /// 处理收到的群消息
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupMessage(object sender, GroupMessageEventArgs e)
        {
            try
            {
                // 本子程序会在酷Q【线程】中被调用，请注意使用对象等需要初始化(CoInitialize,CoUninitialize)。
                // 这里处理消息
                if (e.Msg == "重载寻访卡池")
                {

                    if (!File.Exists(Common.AppDirectory + "cards.json")) {
                         File.Create(Common.AppDirectory + "cards.json").Dispose();
                    }
                    Common.ccardList = new CardList(File.ReadAllText (Common.AppDirectory + "cards.json"));
                    var r = Common.ccardList.initPool();
                    Common.CqApi.SendGroupMessage(e.FromGroup, "初始化" + r.ToString() + "\n" + Common.announce + "\n广告位招租");

                }
                else if (e.Msg == "寻访" || e.Msg == "寻访一次")
                {
                    if (Common.ccardList.isInited() != false)
                    {

                        List<Card> a = Common.ccardList.getCards(1);
                        IniFile iniFile = new IniFile(e.FromGroup.ToString() + ".ini");
                        iniFile.WriteInt(e.FromQQ.ToString(), a[0].name, iniFile.ReadInt(e.FromQQ.ToString(), a[0].name, 0) + 1);
                        if (a[0].name.IndexOf('★') == -1)
                        {
                            Common.CqApi.SendGroupMessage(e.FromGroup, Common.CqApi.CqCode_At(e.FromQQ) + "你获得了: " + CardList.stars(a[0].level) + a[0].name);
                        }
                        else { 
                            Common.CqApi.SendGroupMessage(e.FromGroup, Common.CqApi.CqCode_At(e.FromQQ) + "你获得了: " + a[0].name);
                        }
                        // 于2019年02月26日, 默认注释此行代码.
                        // Common.CqApi.SendGroupMessage (e.FromGroup, Common.CqApi.CqCode_At (e.FromQQ) + "你发送了这样的消息: " + e.Msg);

                        e.Handled = true;


                    }
                    else
                    {
                        Common.CqApi.SendGroupMessage(e.FromGroup, Common.CqApi.CqCode_At(e.FromQQ) + "卡池尚未初始化,输入 重载寻访卡池 初始化卡池");
                        e.Handled = false;
                    }
                    return;
                }
                else if (e.Msg == "寻访十次")
                {
                    if (Common.ccardList.isInited() == false)
                    {
                        Common.CqApi.SendGroupMessage(e.FromGroup, Common.CqApi.CqCode_At(e.FromQQ) + "卡池尚未初始化,输入 重载寻访卡池 初始化卡池");
                        e.Handled = false;
                        return;
                    }
                    else
                    {

                        var strb = new StringBuilder();
                        var b = Common.ccardList.getCards(10);
                        foreach (var item in b)
                        {
                            IniFile iniFile = new IniFile(e.FromGroup.ToString()+".ini");
                            iniFile.WriteInt(e.FromQQ.ToString(),item.name,iniFile.ReadInt(e.FromQQ.ToString(), item.name, 0) + 1);
                            if (item.name.IndexOf('★') == -1)
                            {
                                strb.AppendLine(CardList.stars(item.level) + item.name);
                            }
                            else
                            {
                                strb.AppendLine( item.name);
                             }
                        }
                        e.Handled = true;
                        Common.CqApi.SendGroupMessage(e.FromGroup, Common.CqApi.CqCode_At(e.FromQQ) + "你获得了: \n" + strb.ToString());
                    }
                    return;
                }
                else if (e.Msg == "查看寻访概率")
                {
                    var c = "";

                    Common.CqApi.SendGroupMessage(e.FromGroup, Common.CqApi.CqCode_At(e.FromQQ) + Common.ccardList.getPossibilityText() + c);
                    e.Handled = true;
                }
                else if (e.Msg == "我的历史")
                {
                    IniFile iniFile = new IniFile(e.FromGroup.ToString() + ".ini");
                    var b = iniFile.ReadKeys(e.FromQQ.ToString());
                    StringBuilder sb = new StringBuilder();
                    foreach (var item in b)
                    {
                        sb.AppendLine(item + " : " + iniFile.ReadInt(e.FromQQ.ToString(), item, 0));
                    }
                    Common.CqApi.SendGroupMessage(e.FromGroup, Common.CqApi.CqCode_At(e.FromQQ) + sb.ToString());
                    e.Handled = true;
                }
                else
                {
                    e.Handled = false;
                }
                return;
            }
            catch (Exception ex)
            {
                Common.CqApi.SendGroupMessage(e.FromGroup, "请使用编辑器更改卡池\n错误" + ex.Message + "\n错误源" + ex.Source + "\n" + ex.ToString() + "\n(●ˇ∀ˇ●)广告位招租");
            }
            return;
        }

        /// <summary>
        /// Type=21 群私聊<para/>
        /// 处理收到的群私聊消息
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupPrivateMessage(object sender, PrivateMessageEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用，请注意使用对象等需要初始化(CoInitialize,CoUninitialize)。
            // 这里处理消息


            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=11 群文件上传事件<para/>
        /// 处理收到的群文件上传结果
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupFileUpload(object sender, FileUploadMessageEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用，请注意使用对象等需要初始化(CoInitialize,CoUninitialize)。
            // 这里处理消息
            // 关于文件信息, 触发事件时已经转换完毕, 请直接使用



            e.Handled = false;   // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=101 群事件 - 管理员增加<para/>
        /// 处理收到的群管理员增加事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupManageIncrease(object sender, GroupManageAlterEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用，请注意使用对象等需要初始化(CoInitialize,CoUninitialize)。
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=101 群事件 - 管理员减少<para/>
        /// 处理收到的群管理员减少事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupManageDecrease(object sender, GroupManageAlterEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用，请注意使用对象等需要初始化(CoInitialize,CoUninitialize)。
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=103 群事件 - 群成员增加 - 主动入群<para/>
        /// 处理收到的群成员增加 (主动入群) 事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupMemberJoin(object sender, GroupMemberAlterEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用，请注意使用对象等需要初始化(CoInitialize,CoUninitialize)。
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=103 群事件 - 群成员增加 - 被邀入群<para/>
        /// 处理收到的群成员增加 (被邀入群) 事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupMemberInvitee(object sender, GroupMemberAlterEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用, 请注意使用对象等需要初始化(ConIntialize, CoUninitialize).
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=102 群事件 - 群成员减少 - 成员离开<para/>
        /// 处理收到的群成员减少 (成员离开) 事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupMemberLeave(object sender, GroupMemberAlterEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用, 请注意使用对象等需要初始化(ConIntialize, CoUninitialize).
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=102 群事件 - 群成员减少 - 成员移除<para/>
        /// 处理收到的群成员减少 (成员移除) 事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupMemberRemove(object sender, GroupMemberAlterEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用, 请注意使用对象等需要初始化(ConIntialize, CoUninitialize).
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=302 群事件 - 群请求 - 申请入群<para/>
        /// 处理收到的群请求 (申请入群) 事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupAddApply(object sender, GroupAddRequestEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用, 请注意使用对象等需要初始化(ConIntialize, CoUninitialize).
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }

        /// <summary>
        /// Type=302 群事件 - 群请求 - 被邀入群 (机器人被邀)<para/>
        /// 处理收到的群请求 (被邀入群) 事件
        /// </summary>
        /// <param name="sender">事件的触发对象</param>
        /// <param name="e">事件的附加参数</param>
        public void ReceiveGroupAddInvitee(object sender, GroupAddRequestEventArgs e)
        {
            // 本子程序会在酷Q【线程】中被调用, 请注意使用对象等需要初始化(ConIntialize, CoUninitialize).
            // 这里处理消息



            e.Handled = false;  // 关于返回说明, 请参见 "Event_FriendMessage.ReceiveFriendMessage" 方法
        }
        #endregion
    }
}
